package com.operator.Activitys.fragment;

import android.os.Handler;
import android.os.Message;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.jaredrummler.materialspinner.MaterialSpinner;
import com.operator.Activitys.R;
import com.operator.Activitys.bean.SetMeal;
import com.operator.Activitys.fragment.base.BaseFragment;
import com.operator.Activitys.utils.Constant;

import org.simple.eventbus.EventBus;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;

import butterknife.Bind;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

/**
 * 项目名称：金泽云 手机app
 * 类描述：号卡销售 ----> 移动 fragment
 * 创建人：张飞祥
 * 创建时间：2018/5/3 11:08
 * 修改人：张飞祥
 * 修改时间：2018/5/3 11:08
 * 修改备注：
 */
public class SaleMobileFragment extends BaseFragment {

    //资费
    @Bind(R.id.spinner_number_postage)
    MaterialSpinner spinnerNumberPostage;
    //号码类型
    @Bind(R.id.spinner_number_type)
    MaterialSpinner spinnerNumberType;

    //TODO 设置 号码类型 （公有、私有）
    private List<String> mNumberTag = new LinkedList<>(Arrays.asList("公有号码", "私有号码"));
    //号码类型标记  1.公有号码、2.私有号码（默认 "公有号码" ）
    private String mNumberType = "0";

    //号卡套餐 标题
    private String mSetMealTitle = "";
    //号卡套餐 详情
    private String mSetMealDetails = "";
    //号卡套餐 价格
    private String mSetMealPrice = "";

    //携带多个参数 数组
    private String mSaleStr[];

    @Override
    protected void initViews() {
        //TODO 网络请求 获取 套餐列表
        initHttpSetMeal();
        //TODO 业务逻辑 设计
        initDate();
    }

    /**
     * 业务逻辑 设计
     */
    private void initDate() {
        //设置 号码类型 数据
        spinnerNumberType.setItems(mNumberTag);
        //设置 下拉列表最大高度
        spinnerNumberType.setDropdownMaxHeight(1000);
        //TODO 号码类型 监听事件
        spinnerNumberType.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener<String>() {
            @Override
            public void onItemSelected(MaterialSpinner view, int position, long id, String item) {
                //业务逻辑判断
                if (item.equals("公有号码"))
                    mNumberType = "0";
                else
                    mNumberType = "1";
                //设置 号码类型 数据
                mSaleStr = new String[]{"移动", mNumberType};
                //发送 号码类型
                EventBus.getDefault().post(mSaleStr, Constant.BUS_SALE_NUMBER_TYPE);
            }
        });
    }

    /**
     * 网络请求 获取 移动套餐列表
     */
    private void initHttpSetMeal() {

        //TODO 创建 Handler 消息
        final Message message = handler.obtainMessage();

        /**
         * 创建 okHttp3 请求方式
         */
        FormBody.Builder params=new FormBody.Builder();
        OkHttpClient okHttpClient=new OkHttpClient();
        Request request=new Request.Builder()
                .url(Constant.HTTP_SET_MEAL_URL + "移动")
                .post(params.build())
                .build();
        Call call=okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
            }
            @Override
            public void onResponse(Call call, final Response response) throws IOException {
                //得到服务器返回的具体内容
                String json = response.body().string();
                //TODO 通过handler更新UI
                //创建消息
                final Message message = handler.obtainMessage();
                //添加 消息字节数据
                message.obj = json;
                //添加 消息接收标志
                message.what = Constant.HANDLE_SET_MEAL_CODE;
                //发送数据
                handler.sendMessage (message);
            }
        });

    }

    /**
     * 异步加载 套餐列表 数据 处理
     */
    public Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what){
                //TODO 加载数据 套餐列表成功
                case Constant.HANDLE_SET_MEAL_CODE:
                    //开始解析 转换为 实体数据
                    Gson gson = new Gson();
                    final List<SetMeal> list = gson.fromJson(msg.obj + "",new TypeToken<List<SetMeal>>() {}.getType());

                    if (list != null && list.size()!=0){

                        //新建 list 数组，把详情名称提取出来
                        List<String> backs = new ArrayList<>();
                        //循环提取数据
                        for (int i = 0; i < list.size(); i++) {
                            backs.add(list.get(i).getTitle());
                        }
                        //TODO 填充数据 到下拉列表中
                        //清空原有数据
                        spinnerNumberPostage.setItems(new ArrayList<String>());
                        //添加新数据
                        spinnerNumberPostage.setItems(backs);
                        //设置 下拉列表最大高度
                        if (backs.size()>0)
                            spinnerNumberPostage.setDropdownMaxHeight(500);

                        //获取 默认 号卡套餐标题
                        mSetMealTitle = list.get(0).getTitle();
                        //获取 默认 号卡套餐详情
                        mSetMealDetails = list.get(0).getDetial();
                        //获取 默认 号卡套餐价格
                        mSetMealPrice = list.get(0).getPrice();

                        //TODO 号卡套餐 监听事件
                        spinnerNumberPostage.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener<String>() {
                            @Override public void onItemSelected(MaterialSpinner view, int position, long id, String item) {
                                //获取 第 i 个 号卡套餐标题
                                mSetMealTitle = list.get(position).getTitle();
                                //获取 第 i 个 号卡套餐 详情
                                mSetMealDetails = list.get(position).getDetial();
                                //获取 默认 号卡套餐价格
                                mSetMealPrice = list.get(position).getPrice();
                                //设置 套餐类型 数据
                                mSaleStr = new String[]{"移动", mSetMealDetails,mSetMealTitle,mSetMealPrice};
                                //发送号卡 详情
                                EventBus.getDefault().post(mSaleStr,Constant.BUS_SALE_ITEM_DETAILS);
                            }
                        });
                    }
                    break;
            }
        }
    };

    /**
     * 获取 号码类型
     * @return
     */
    public String getNumberType (){
        return mNumberType;
    }

    /**
     * 获取 套餐 标题
     * @return
     */
    public String getSetMealTitle (){
        return mSetMealTitle;
    }

    /**
     * 获取 套餐 价格
     *
     * @return
     */
    public String getSetMealPrice() {
        return mSetMealPrice;
    }

    /**
     * 获取 套餐 详情
     * @return
     */
    public String getSetMealDetails (){
        return mSetMealDetails;
    }

    @Override
    protected int getContentViewId() {
        return R.layout.frg_sale_number;
    }
}
